package com.github.yangyishe.p100;

import com.github.yangyishe.ListNode;

/**
 * 83. 删除排序链表中的重复元素
 * https://leetcode.cn/problems/remove-duplicates-from-sorted-list/
 *
 * 给定一个已排序的链表的头 head ， 删除所有重复的元素，使每个元素只出现一次 。返回 已排序的链表 。
 *
 *
 *
 * 示例 1：
 *
 *
 * 输入：head = [1,1,2]
 * 输出：[1,2]
 * 示例 2：
 *
 *
 * 输入：head = [1,1,2,3,3]
 * 输出：[1,2,3]
 *
 *
 * 提示：
 *
 * 链表中节点数目在范围 [0, 300] 内
 * -100 <= Node.val <= 100
 * 题目数据保证链表已经按升序 排列
 */
public class Problem83 {
    public static void main(String[] args) {
        int[] arr=new int[]{1,1,2,2,3};
        ListNode instance = ListNode.getInstance(arr);

        Problem83 problem83 = new Problem83();
        ListNode listNode = problem83.deleteDuplicates(instance);
        listNode.print();

    }

    public ListNode deleteDuplicates(ListNode head) {
        if (head==null) {
            return null;
        }
        int tempInt=head.val;
        ListNode temp=head;
        while(temp!=null&&temp.next!=null){
            // 业务区:将当前节点的next切换为非同值或null
            while(temp.next!=null&&tempInt==temp.next.val){
                temp.next=temp.next.next;
            }

            // 临时数字常量, 切换为下一个节点的值(只要不为空)
            if(temp.next!=null){
                tempInt=temp.next.val;
            }
            // 照常遍历
            temp=temp.next;
        }

        return head;
    }
}
